You then link an executable that uses this shared object, useoldfoo. This executable specifies version sgi10.2 for soname foo.so. (Remember that the executable inherits the last version in the version_string of the shared object.)initial_version#sgi10.0:upgrade#sgi10.1:new_devices#sgi10.2
The time comes to upgrade foo.so in an incompatible way. Note that the major version of foo.so is 10, so you move the existing foo.so to the filename foo.so.10 and create a new foo.so with the version_string:
New executables linked with foo.so use it directly. Older executables, like useoldfoo, attempt to use foo.so, but find that its version (sgi11.0) is not the version they need (sgi10.2). They then attempt to find a foo.so in the filename foo.so.10 with version sgi10.2.efficient_interfaces#sgi11.0
Note: When a needed DSO has its interface changed, then a new version is created. If the interface change is not compatible with older versions, then a consuming shared object needs incompatible versions in order to use the new version, even if it doesn't use that part of the interface that is changed.
This chapter explains howto use performance tools such as prof, pixie, and cord.